Representing Instructions
重要觀念 :
ASM != instruction
人 -----------> processor
assembler
雖然經常有人說組合語言跟instruction彼此之間是接近的
但是他們兩者還是有很多的不同之處
同學們可以在日後學習到pseudo instruction時
就可以更進一步的發現
assembly langrage跟instruction set其實是有一些差異性的
instruction word :
instruction是由32個bit所組成
而每一個instruction word
我們將會把它分成好幾個不同的"fields"不同的欄位
這些欄位會分別的告訴processor我們需要處理的事情
在MIPS的指令集裡面
我們依據切割不同欄位的方法將指令分為三個不同的format
"R-format, I-format以及J-format"
R-format :
上面的數字代表的是每一個field它裡面實際上需要的bit的個數
表格則代表著不同的field以及它每一個所對應的名字
1.opcode
這個opcode它對應的這個指令叫"做的事情是什麼"
注意 : 在MIPS的指令集裡面"所有的R-format指令它的opcode都為0"
2.function
在MIPS的指令集裡面
由於R-format的opcode都為0
因此我們需要搭配了0的opcode再加上function
才能夠決定這個R-format的指令要做的事情是什麼
3.rs (source register)
這個指令所要處理的第一個operand
4.rt (target register)
這個指令所要處理的第二個operand
5.rd (destination register)
這個指令當它處理完成之後結果所需要放入的register
同學們可以注意到
我們在前面所定義的register fields
每一個都只要5個bit就夠了
這是因為在MIPS的指令集裡面
我們總共只有32個register
因此我們只需要5個bit就足以表示這32個不同的register(2^5=32)
6.shamt (shift amount)
提供給shift的指令來使用的
我們都知道在MIPS裡面一個register總共也就只有32個bit
當我們要shift的數量超過31個bit
其實是沒有任何意義的
因為所有的資料都shift光了
這也就是為什麼
我們總共只需要用5個bit就可以明確的去描述我們所需要shift的個數
在MIPS的指令集裡面
任何R type的指令
只要它不是shift的指令
那麼它的shift amount的欄位就會等於0
例子 :
instruction它format裡面的順序
跟assembly的順序其實是不一樣的
I-format :
1.opcode
這個opcode它對應的這個指令叫"做的事情是什麼"
注意 : 在MIPS的指令集裡面"所有的R-format指令它的opcode都為0"
3.rs (source register)
這個指令所要處理的operand
4.rt (target register)
這個指令當它處理完成之後結果所需要放入的register
5.immediate
這個指令當它處理完成之後結果所需要放入的register
有負號記的做 2's complement
immediate這個field是由16個bit所組合而成的
也因此它可以表示2的16次方種不同的數值
這些常數在實際處理的時候將會進行sign-extention成為32個bit
於是就可以跟register一起做運算
Design Principle 4 : Good design demands good compromises(好的設計需要好的折衷)
例子一 :
immediate注意負號
記得做signsign-extention
例子二 :
Stored Program
我們可以把這些程式的指令像資料一般儲存在記憶體裡面
當我們需要的時候再把它讀取出來
無論是instruction指令或者是data資料
我們都可以用一個特定的記憶體位址去access它
Program Counter
每一個processor會用一個特殊的暫存器"Program Counter"
去指明現在要執行指令實際上在記憶體的哪一個位址
Intel這間公司把program counter稱做Instruction Address Pointer
好處:
現在需要執行某一個程式:
1.將這個程式把它搬移到記憶體裡
2.透過PC這個register讓他指到我們想要執行的程式
processor就可以去開始執行我們希望執行的程式
想要執行其他的程式:
只需要修改PC 這個register的值
指到我們希望執行的新的程式它所在記憶體的位址
processor就會自動的去從記憶體裡面取出我們想要執行新的程式開始執行
檔案概念由此而生